/// 演示Copy特质对传参的影响
/// 演示Deref特质对传参的影响

#[derive(Debug, Clone,Copy)]
struct Bag {
    price: f32,
    no: u32,
}

/**
 * 由于Bag实现了Copy trait，sell_bag函数可以拷贝传入参数
 */
fn sell_bag(bag:Bag)->f32{
    println!("{:?} 已经售出..",bag);    
    bag.price
}

fn show_bag(bag:&Bag){
    println!("{:?}",bag);
}

fn main() {
    let bag=Bag{
        price:100.0,
        no:1000
    };
    println!("{:?}",bag);

    //1.0 演示Copy特质对传参的影响
    // 拷贝bag对象，传入sell_bag函数
    let price=sell_bag(bag);
    println!("{}",price);
   
    // 再次打印bag对象，可以发现bag没有被修改
    println!("{:?}",bag);

    //2.0演示Deref特质对传参的影响
    let mybag=Box::new(Bag{ 
        price:100.0,
        no:1000
    });
    show_bag(&mybag);    
}